package main

import (
	"fmt"
	"github.com/gin-gonic/gin"
	"io"
	"os"
)

// main函数是程序的入口点
func main() {
	// 初始化默认的Gin路由器
	router := gin.Default()
	// 设置最大内存限制，用于处理multipart/form-data请求（默认32MB），这里设置为8MB
	router.MaxMultipartMemory = 8 << 20
	// 定义一个POST路由，用于处理文件上传请求
	router.POST("/upload", func(c *gin.Context) {
		// 尝试从请求中获取名为"file"的文件
		file, err := c.FormFile("file")
		// 如果发生错误，返回错误信息
		if err != nil {
			c.JSON(400, gin.H{"msg": "error"})
			return
		}
		// 打印文件名和大小
		fmt.Println(file.Filename)
		fmt.Println(file.Size)
		// 将文件保存到指定路径
		c.SaveUploadedFile(file, "upload/"+file.Filename)

		// 打开文件，以便读取内容
		readerFile, _ := file.Open()
		// 读取文件的全部内容
		data, _ := io.ReadAll(readerFile)
		// 打印文件内容
		fmt.Println(string(data))

		// 创建一个新的文件，用于写入读取的内容
		writeFile, _ := os.Create("./uploadWrite/" + file.Filename)
		// 将读取的内容复制到新文件中
		io.Copy(writeFile, readerFile)
		// 返回成功信息
		c.JSON(200, gin.H{"msg": "ok"})
	})
	router.POST("/uploads", func(c *gin.Context) {
		form, _ := c.MultipartForm()
		files := form.File["file"]
		for _, file := range files {
			// 打印文件名和大小
			fmt.Println(file.Filename)
			fmt.Println(file.Size)
			// 将文件保存到指定路径
			c.SaveUploadedFile(file, "upload/"+file.Filename)
		}
		c.JSON(200, gin.H{"msg": fmt.Sprintf("成功上传%d个文件", len(files))})
	})
	// 启动服务器，监听8080端口
	router.Run(":8080")
}
